/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package TratamentoData;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import Empregado.Excecao;

/**
 *
 * @author igor
 */
// A classe da DATA foi criada para tratar os dados que trabalham com datas
public class Data {

    public static final String DATA_INVALIDA = "DATA INVALIDA";
    public static final String MENOR_IDADE = "USUÁRIO MENOR DE IDADE";
    public static final int MAIOR_IDADE = 18;
    public static final String IDADE_INADEQUADA = "IDADE INADEQUADA";

    public static void analisadorData(String nascimento, String admissao) throws Excecao {
        try {
            Date nascimentoTeste = converteData().parse(nascimento);
            Date admissaoTeste = converteData().parse(admissao);

            ePosteriorDataHoje(nascimentoTeste);
            ePosteriorDataHoje(admissaoTeste);
            verificarDataAdmissao(admissaoTeste, nascimentoTeste);
            verificarMaioridade(admissaoTeste, nascimentoTeste);;

        } catch (ParseException ex) {
            Logger.getLogger(Data.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public static void analisadorData(String nascimento, String admissao, String desligamento) throws Excecao {
        try {
            Date nascimentoTeste = converteData().parse(nascimento);
            Date admissaoTeste = converteData().parse(admissao);
            Date desligamentoTeste = converteData().parse(desligamento);

            ePosteriorDataHoje(nascimentoTeste);
            ePosteriorDataHoje(admissaoTeste);
            ePosteriorDataHoje(desligamentoTeste);
            verificarDataAdmissao(admissaoTeste, nascimentoTeste);
            verificarDataAdmissao(desligamentoTeste, admissaoTeste);
            verificarMaioridade(admissaoTeste, nascimentoTeste);;

        } catch (ParseException ex) {
            Logger.getLogger(Data.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public static SimpleDateFormat converteData() {
        SimpleDateFormat tempDate = new SimpleDateFormat("dd/MM/yyyy");
        return tempDate;
    }

    public static void ePosteriorDataHoje(Date pData) throws Excecao {

        Date hoje = new Date();

        if (pData.after(hoje)) {
            throw new Excecao(DATA_INVALIDA);
        }
    }

    public static void verificarDataAdmissao(Date pDataAdmissao, Date pDataNascimento) throws Excecao {

        if (pDataNascimento.after(pDataAdmissao)) {
            throw new Excecao(DATA_INVALIDA);
        }

    }

    public static void verificarMaioridade(Date pDataAdmissao, Date pDataNascimento) throws Excecao {

        if ((pDataAdmissao.getYear() - pDataNascimento.getYear()) < MAIOR_IDADE) {
            throw new Excecao(MENOR_IDADE);
        } else if ((pDataAdmissao.getYear() - pDataNascimento.getYear()) == MAIOR_IDADE) {

            if ((pDataAdmissao.getMonth() + 1) < (pDataNascimento.getMonth() + 1)) {
                throw new Excecao(MENOR_IDADE);
            } else if ((pDataAdmissao.getMonth() + 1) == (pDataNascimento.getMonth() + 1)) {
                if (pDataAdmissao.getDate() <= pDataNascimento.getDate()) {
                    throw new Excecao(MENOR_IDADE);
                }
            }

        }

    }

    public static String processaData(Date dataNascimento) {


        String result = dataNascimento.toString();
        return result;
    }

    public static String converteDataBrasil(Date dataAntiga) {
            SimpleDateFormat out = new SimpleDateFormat("dd/MM/yyyy");
            String result = out.format(dataAntiga);
            return result;
    }
}
